// 包声明语句，用于组织和管理Java类
// com.itheima.staticmethod是包的路径，表示该类位于staticmethod包下
package com.itheima.staticmethod;


// 定义了一个名为Test的公共类
// public表示这个类可以被其他包中的类访问
public class Test {
    // main方法：Java程序的入口点
    // public static void main(String[] args) 是固定的入口方法格式
    // public表示可以被JVM调用
    // static表示不需要创建对象就可以调用
    // void表示没有返回值
    // args是命令行参数数组
    public static void main(String[] args) {
        // 目标：认识static修饰和不修饰方法的区别
        
        // 1、类名.静态方法（推荐）
        // 直接通过Student类名调用printHelloWorld静态方法
        // 这是调用静态方法的推荐方式，因为静态方法属于类而非对象
        Student.printHelloWorld();

        // 2、对象.静态方法（不推荐）
        // 创建一个Student类的对象s1
        Student s1 = new Student();
        // 通过对象调用静态方法printHelloWorld
        // 这种方式虽然语法正确，但不推荐使用
        // 因为静态方法属于类，与对象无关，不需要创建对象就能调用
        s1.printHelloWorld();

        // 3、对象名.实例方法
        // Student.printPass(); // 报错
        // 上面这行代码会报错，因为printPass是实例方法
        // 实例方法必须通过对象来调用，不能通过类名调用
        
        // 使用setter方法设置s1对象的score值为59.5
        s1.setScore(59.5);
        // 通过对象调用实例方法printPass
        // 实例方法需要访问对象的数据（如score），所以必须通过对象调用
        s1.printPass();

        // 规范：如果这个方法只是为了做一个功能且不需要直接访问对象的数据，这个方法直接定义成静态方法
        //     如果这个方法是对象的行为，需要访问对象的数据，这个方法必须定义成实例方法

        // Test.printHelloWorld2();
        // 上面这行代码也可以正常工作，但在同一个类中调用静态方法
        // 可以直接调用，不需要加类名
        
        // 直接调用本类中的静态方法printHelloWorld2
        // 在同一个类中调用静态方法时，可以省略类名
        printHelloWorld2();
    }

    // 定义了一个公共的静态方法printHelloWorld2
    // 这个方法属于Test类本身
    // 打印四行"Hello World"
    public static void printHelloWorld2(){
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
    }
}
